package estudoregistry.model;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class HiveHeader {
    private FileInputStream fis;
    private List<HiveElement> elements;
    private HiveElement magicNumber;
    private HiveElement seqNumber1;
    private HiveElement seqNumber2;
    private HiveElement lastModificationStamp64bit;
    private HiveElement majorVersion;
    private HiveElement minorVersion;
    private HiveElement fileType;
    private HiveElement unknown01;
    private HiveElement pointerFirstRecord;
    private HiveElement hBinDataSize;
    private HiveElement unknown02;
    private HiveElement fileName;
    private HiveElement unknown03;
    private HiveElement unknown04;
    private HiveElement unknown05;
    private HiveElement unknown06;
    private HiveElement unknown07;
    private HiveElement unknown08;
    private HiveElement checksum;
    private HiveElement unknown09;
    private HiveElement unknown10;
    private HiveElement unknown11;
    private HiveElement unknown12;
    private HiveElement unknown13;
    private HiveElement unknown14;

    public HiveHeader(FileInputStream fis) {
        this.fis = fis;
//        this.magicNumber = new HiveElement(fis,4,HiveElement.STRING);
//        this.seqNumber1 = new HiveElement(fis,4,HiveElement.UNSIGNED_INTEGER);
//        this.seqNumber2 = new HiveElement(fis,4,HiveElement.UNSIGNED_INTEGER);
//        this.lastModificationStamp64bit = new HiveElement(fis,8,HiveElement.TIMESTAMP64);
//        this.majorVersion = new HiveElement(fis,4,HiveElement.UNSIGNED_INTEGER);
//        this.minorVersion = new HiveElement(fis,4,HiveElement.UNSIGNED_INTEGER);
//        this.fileType = new HiveElement(fis,4,HiveElement.UNKNOWN);
//        this.unknown01 = new HiveElement(fis,4,HiveElement.UNKNOWN);
//        this.pointerFirstRecord = new HiveElement(fis,4,HiveElement.OFFSET);
//        this.hBinDataSize = new HiveElement(fis,4,HiveElement.OFFSET);
//        this.unknown02 = new HiveElement(fis,4,HiveElement.UNKNOWN);
//        this.fileName = new HiveElement(fis,64,HiveElement.STRING);
//        this.unknown03 = new HiveElement(fis,16,HiveElement.GUID);
//        this.unknown04 = new HiveElement(fis,16,HiveElement.GUID);
//        this.unknown05 = new HiveElement(fis,4,HiveElement.UNSIGNED_INTEGER);
//        this.unknown06 = new HiveElement(fis,16,HiveElement.GUID);
//        this.unknown07 = new HiveElement(fis,4,HiveElement.UNSIGNED_INTEGER);
//        this.unknown08 = new HiveElement(fis,340,HiveElement.UNKNOWN);
//        this.checksum = new HiveElement(fis,4,HiveElement.UNSIGNED_INTEGER);
//        this.unknown09 = new HiveElement(fis,3528,HiveElement.UNKNOWN);
//        this.unknown10 = new HiveElement(fis,16,HiveElement.GUID);
//        this.unknown11 = new HiveElement(fis,16,HiveElement.GUID);
//        this.unknown12 = new HiveElement(fis,16,HiveElement.GUID);
//        this.unknown13 = new HiveElement(fis,4,HiveElement.UNKNOWN);
//        this.unknown14 = new HiveElement(fis,4,HiveElement.UNKNOWN);
    }

    public void readElement(String name, int lenght, int type) throws IOException {
        getElements().add(new HiveElement(this.fis,name,lenght,type));
    }

    public List<HiveElement> getElements() {
        if (this.elements==null) this.elements = new ArrayList<HiveElement>();
        return this.elements;
    }
}
